package 同构字符串;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.stream.Collectors;

//给定两个字符串 s 和 t ，判断它们是否是同构的。
//
//如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。
//
//每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。
//
//
//
//示例 1:
//
//输入：s = "egg", t = "add"
//输出：true
//示例 2：
//
//输入：s = "foo", t = "bar"
//输出：false
public class Solution {
    public static boolean isIsomorphic(String s, String t) {
        Map<Character, Long> map1 = s.chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(c -> c, Collectors.counting()));
        Map<Character, Long> map2 = t.chars().mapToObj(c -> (char) c).collect(Collectors.groupingBy(c -> c, Collectors.counting()));

        ArrayList<Long> longs1 = new ArrayList<>(map1.values());
        ArrayList<Long> longs2 = new ArrayList<>(map2.values());
        Collections.sort(longs1);
        Collections.sort(longs2);

        return longs1.equals(longs2);

    }

    public static void main(String[] args) {
        String s = "bbbaaaba"; String t = "aaabbbba";
        System.out.println(isIsomorphic(s,t));
    }
}
